OWASP是一個線上社群、非營利組織,全名為開放軟體安全計畫Open Web Application Security Project,在全世界有許多分會,這個組織主要目標是研究及討論網路軟體安全的標準、工具、文件。
這個組織同時會進行許多計畫,不過我們今天要討論的是他發佈的「十大網路弱點防護守則」,這個守則也被許多組織列為必要文件。
在2017年有一版,可以看這個參考資料; 而在2021年時做了更新,來看一下最新版的Top 10提到了什麼?
這個Top 10的定義為何呢?
The OWASP Top 10 is a standard awareness document for developers and web application security. It represents a broad consensus about the most critical security risks to web applications.
根據官方的文件,這指的是OWASP共識而來十項他們認為最為關鍵的網路安全風險。
從2017-2021的變化如下
from OWASP Top Ten
相對於2017年的第五名,在2021年被上升到第一名。
他們對將近94%的網路應用程式做了某種形式的測試,其中有3.81%出現這個類型的錯誤。
最值得注意的弱點包括: CWE-200:暴露機敏信息給未授權者、CWE-201:將敏感信息插入發送數據(註1)和CWE-352:跨站請求偽造(CSRF)。
登入控制Access Control僅能在server-side或是server-less的api中控制,讓攻擊者無法直接修改登入控制相關程式碼或是其他可能影響登入控制的metadata(描述資料的資料)。
根據文件舉出幾點:
位置由#3變成#2,以前稱為Sensitive Data Expose,改名的原因是因為先前的命名更像是現象,而不是原因。
主要原因在此列出是密碼學的相關失敗,常會導致資料的暴露,常見的風險包括: 使用寫死(固定)的金鑰加密、使用損壞或有風險的加密演算法、隨機度不夠高(熵低)
總結是:對敏感資料加密,時常關注加密演算法的變化,時時注意更新。
另外根據文件列出以下幾點:
指的是透過各種由網站允許的輸入方式將惡意資料放入了資料庫中,或直接被程式使用(例如參數)。
總結來說: 將數據和命令查詢分開
以下列舉幾點官方建議:
是2021年的一個新分類,關注的部分是設計跟架構有關的缺陷,他的目的是在呼籲大家使用安全的設計模式。
這個分類重點在於「不安全的設計」,並指出「不安全的設計」與「不安全的實現」(也就是其他分類的總和)是有區別的,並提到若不安全的設計出現問題,是無法靠完美的實現來解決。
並指出,這些分類的根本問題在於對於開發中的應用程式或系統缺乏必要的業務風險分析。
因為這項分類太難以理解,每個字都看得懂,但合起來就不懂了...
於是我們看一下官方例子:
我覺得第二個例子會比較好明白這個分類想描述的狀況:
顯卡被買走的流程是正常的,但他造成的業務損失(品牌形象)反而變得更為嚴重,這就源自於對於商業風險分析的缺乏,以致於無法注意到在開發時應著重於對於這樣流程正常但反倒造成損失的狀況作出預先的回應
在應用程式有關的相關設置,像HTTP、雲端基礎設施...等設置不良
例如:
安全的各環境安裝過程,包括:
這裡指的就是你的應用程式有任何依賴的基礎或組件,包含系統或套件等具有安全風險。
總結來說: 應該有一個對於依賴的管理流程處理關於依賴的安全風險
包括幾項:
這邊指的是應用程式在對於用戶身份認證的弱點
包括:
在2021年產生的新共識,在無法或未驗證完整性的狀況下,對應用程式的組件、關鍵數據和CICD的流程有樂觀的假設。
這項分類來自於不能保持資料完整性的程式碼與基礎設施有關。
這個弱點讓我想到在2022年初的faker及colors套件意外,有依賴於此library的應用程式都受到影響。
軟體供應鏈的安全性近年來逐漸受到重視,其中包含:
此類弱點是指,是否有足夠且必要的監控及訊息紀錄以確保責任、事件警報、取證能被完善。
所以這個類別主要在確保其他類別的錯誤能被檢測、警報,常見的問題包含:
根據應用程式的風險分析,可以執行的包括:
這項攻擊是利用client => middle Server => internal Server 這樣的結構,透過middle Server與internal Server中間防禦較弱的特性。
將經過特別設計的url透過middle Server傳給internal Server達成攻擊。
CWE-201比較模糊一點,更多解釋是:
The code transmits data to another actor, but a portion of the data includes sensitive information that should not be accessible to that actor.
意指你將資料傳給一個授權者,但資料裡面包含機敏訊息,可能包括驗證用資料,或是能更近一步利用系統的資訊。
官方舉了一個例子是如果在資料錯誤發生時直接回傳,將暴露登入的資料結構給對方。:
Warning: mysql_pconnect(): Access denied for user: 'root@localhost' (Using password: N1nj4) in /usr/local/www/wi-data/includes/database.inc on line 4
今天是文件翻譯日...XD
是蠻值得去官方看看,有相關知識,在開發的時候會比較容易注意到一些資訊安全的壞味道也是好的~
此文章同步發表於部落格,歡迎來逛逛~
OWASP Top Ten
網站安全? 伺服器端請求偽造 SSRF 攻擊 — 「項莊舞劍,意在沛公」